/*
 * Copyright© 2003-2019 浙江汇信科技有限公司, All Rights Reserved.
 */
package com.icinfo.cloud.provider.punish.ucase.casemain.service;

import com.icinfo.cloud.provider.punish.ucase.casemain.dto.CaseOfflineDocumentRecordSaveDto;
import com.icinfo.cloud.provider.punish.ucase.casemain.model.CaseOfflineDocumentQueryDto;
import com.icinfo.cloud.provider.punish.ucase.casemain.model.CaseOfflineDocumentRecord;
import com.icinfo.cloud.provider.punish.ucase.casemain.vo.CaseDocumentCatalogChainOfflineDetailVo;
import com.icinfo.cloud.provider.punish.ucase.casemain.vo.CaseOfflineDocumentDetailVo;
import com.icinfo.cloud.provider.punish.ucase.casemain.vo.CaseOfflineDocumentRecordSaveResultVo;
import com.icinfo.cloud.provider.punish.ucase.casemain.vo.CaseStageLinkRelateDocumentVo;
import com.icinfo.framework.core.service.BaseService;

import java.util.List;

/**
 * 描述: 案件线下文书记录表 case_offline_document_record 对应的Service接口.<br>
 *
 * @author framework generator
 * @date 2022年07月26日
 */
public interface ICaseOfflineDocumentRecordService extends BaseService {

    /**
     * 描述：保存线下文书
     *
     * @param saveDto 保存dto
     * @return {@link CaseOfflineDocumentRecordSaveResultVo }
     * @author shishengyao
     * @date 2022/07/26
     */
    int saveCaseOfflineDocument(CaseOfflineDocumentRecordSaveDto saveDto);

    /**
     * 描述：查询线下文书详情
     *
     * @param queryDto 查询dto
     * @return {@link CaseOfflineDocumentDetailVo }
     * @author shishengyao
     * @date 2022/07/26
     */
    CaseOfflineDocumentDetailVo getCaseOfflineDocumentDetail(CaseOfflineDocumentQueryDto queryDto);

    /**
     * 描述：获取通过"线下文书"渠道的案件关联文书信息
     *
     * @param caseId 用例id
     * @return {@link List<CaseStageLinkRelateDocumentVo> }
     * @author shishengyao
     * @date 2022/07/27
     */
    List<CaseStageLinkRelateDocumentVo> getOfflineDocInfoToCaseStageLinkRelateDocument(String caseId);

    /**
     * 描述：删除线下文书
     *
     * @param queryDto 查询dto
     * @return {@link CaseOfflineDocumentRecordSaveResultVo }
     * @author zhangqiang
     * @date 2022/08/24
     */
    int deleteCaseOfflineDocument(CaseOfflineDocumentQueryDto queryDto);

    /**
     * 描述：根据id获取所有的线下文书信息
     *
     * @param caseId 用例id
     * @author tianrunjia
     * @date 2022-08-28
     */
    List<CaseDocumentCatalogChainOfflineDetailVo> doGetCaseDocumentCatalogChainOfflineDetailVo(String caseId);

    /**
     * 【V1.3.0】描述：根据环节编码撤回线下上传文书
     *
     * @param caseId       用例id
     * @param caseLinkCode 情况下链接代码
     * @author shishengyao
     * @date 2022/11/16
     */
    void recallCaseOfflineDocumentByCaseLinkCode(String caseId, String caseLinkCode);

    /**
     * 获取案件某个阶段的所有线下文书
     * @param caseId
     * @param caseStageCode
     * @return
     */
    List<CaseOfflineDocumentRecord> getCaseOfflineDocumentRecord(String caseId, String caseStageCode);

    /**
     * 根据文书种类获取案件的所有线下文书
     * @param caseId
     * @param documentKindCodes
     * @return
     */
    List<CaseOfflineDocumentRecord> getCaseOfflineDocumentRecordByKindCodes(String caseId, List<String> documentKindCodes);
}
